package com.common.config.springdoc;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 *
 * @Author: @weixueshi
 * @Create: 2024/4/26 - 18:27
 * @Version: v1.0
 */
@Configuration
public class SpringDocConfig {

    /**
     * 接口文档配置
     * @return OpenAPI 实例，包含 API 的元信息
     */
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI().info(getApiInfo());
    }

    /**
     * 提供 API 文档的元信息，包括标题、描述、联系人、许可证和版本号
     * @return Info 实例，封装了 API 的基本信息
     */
    private Info getApiInfo() {
        return new Info()
                // 配置文档标题
                .title("通用权限管理系统后端接口文档")
                // 配置作者信息
                .contact(new Contact()
                        .name("sixkey")
                        .url("https://swx08.github.io/vuepress/")
                        .email("2073958890@qq.com"))
                // 配置License许可证信息
                .license(new License()
                        .name("Apache 2.0")
                        .url("https://swx08.github.io/vuepress/"))
                // 配置版本号
                .version("1.0");
    }

    /**
     * 分组接口文档配置
     * @return
     */
    @Bean
    public GroupedOpenApi backendApi() {
        return GroupedOpenApi.builder()
                .displayName("全部接口")
                .group("api")
                .pathsToMatch("/**")
                .packagesToScan("com.common.controller")
                .build();
    }

    /**
     * 分组接口文档配置
     * @return
     */
    // @Bean
    // public GroupedOpenApi frondApi() {
    //     return GroupedOpenApi.builder()
    //             .displayName("前台接口")
    //             .group("front-api")
    //             .pathsToMatch("/front/**")
    //             .packagesToScan("com.sy.controller.front")
    //             .build();
    // }
}

